#include <iostream>


//拷贝构造
/**这些对象都有不同地址，都是新的对象，只不过使用的都是t2的值
 * 默认情况下，类对象的拷贝是每个成员变量逐个拷贝 
 * 在类中定义适当的赋值运算符，就能够控制对象的拷贝控制行为
 * 注意，拷贝构造虽然能够完成对象的阿拷贝，但是每次都需要赋值，会造成效率低下等弊端
 * Tine t=t2;
 * Time t3(t2)
 * Time t4{t2};
 * Time t5={t2}
*/

class Time{
public:
    Time(){

    }

    //拷贝构造
    Time(const Time&t){
        this->year=t.year;
        this->month=t.month;
        this->day=t.day;
    }


private:
    int year;
    int month;
    int day;

};

//注意：
//      如果类成员变量中存在指针类型，一定要重新定义拷贝构造和拷贝赋值运算符，如不重新定义，使用默认拷贝构造，都赋值同一块地址，
//那么析构时，当该指针被销毁，另一个对象仍旧存在一个指向该地址的指针，就会造成指针悬空